package com.love.marriage.userInfo.vo;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.love.marriage.common.vo.BaseVo;
import com.love.marriage.config.Long2StringSerializer;
import com.love.marriage.identityVerification.vo.IdentityVerificationVo;
import com.love.marriage.matchmakerInfo.vo.MatchmakerInfoVo;
import com.love.marriage.offlineServiceProvider.vo.OfflineServiceProviderVo;
import com.love.marriage.oss.vo.FileInfoVo;
import com.love.marriage.userMembershipInfo.vo.UserMembershipInfoVo;
import com.love.marriage.userProfileInfo.vo.UserProfileInfoVo;
import com.love.marriage.userSettingsInfo.vo.UserSettingsInfoVo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * description:  用户表Vo
 * author:       mybatisPlus
 * createDate:   2024-10-11 22:04:00
 * version:      1.0.0
 */
@Getter
@Setter
@Accessors(chain = true)
@Schema(name = "UserInfoVo", description = "用户表Vo")
public class UserInfoVo extends BaseVo<UserInfoVo>{

    @Schema(description = "用户名", type = "String", implementation = String.class)
    private String username;

    @Schema(description = "密码（加密存储）", type = "String", implementation = String.class)
    private String password;

    @Schema(description = "手机号码", type = "String", implementation = String.class)
    private String phone;

    @Schema(description = "用户编码", type = "String", implementation = String.class)
    private String code;

    @Schema(description = "用户状态 (active=活跃, inactive=不活跃)", type = "String", implementation = String.class)
    private String status;

    @Schema(description = "微信OpenID", type = "String", implementation = String.class)
    private String wechatOpenid;

    @Schema(description = "微信UnionID（跨平台统一标识）", type = "String", implementation = String.class)
    private String wechatUnionid;

    @Schema(description = "微信公众号OpenID", type = "String", implementation = String.class)
    private String wechatGzhOpenid;

    @Schema(description = "是否红娘", type = "Boolean", implementation = Boolean.class)
    private Boolean matchmakerFlag;

    @JsonSerialize(using = Long2StringSerializer.class)
    @Schema(description = "头像id", type = "Long", implementation = Long.class)
    private Long avatar;

    @Schema(description = "仅自己可见（1：是，0：否）", type = "Integer", implementation = Integer.class)
    private Integer self;

    @Schema(description = "绑定微信账号的时间", type = "LocalDateTime", implementation = LocalDateTime.class)
    private LocalDateTime wechatBindTime;

    @Schema(description = "推荐人的用户id", type = "Long", implementation = Long.class)
    @JsonSerialize(using = Long2StringSerializer.class)
    private Long introUserId;

    @Schema(description = "来源,字典(source),1官方来源，2红娘，3婚介所", type = "Integer", implementation = Integer.class)
    private Integer source;

    @Schema(description = "来源", type = "String", implementation = String.class)
    private String fromSource;

    @Schema(description = "个人头像", type = "FileInfoVo", implementation = FileInfoVo.class)
    private FileInfoVo personAvatar;

    @Schema(description = "是否隐藏手机号", implementation = Boolean.class)
    private Boolean hiddenPhone;

    @Schema(description = "本地imId", implementation = String.class)
    private String localImId;

    @Schema(description = "消费总金额", implementation = BigDecimal.class)
    private BigDecimal totalInvitedAmount;

    @Schema(description = "回佣金额", implementation = BigDecimal.class)
    private BigDecimal sumAmount;

    @Schema(description = "消费金额", implementation = BigDecimal.class)
    private BigDecimal sumTotalAmount;

    @Schema(description = "合伙人类型", implementation = String.class)
    private String partnerType;

    @Schema(description = "单身标识", implementation = Boolean.class)
    private Boolean singleFlag;

    @Schema(name = "membershipFlag", description ="会员标识", type = "Boolean", implementation = Boolean.class)
    private Boolean membershipFlag;

    @Schema(name = "membershipName", description ="会员类型名称", type = "String", implementation = String.class)
    private String membershipName;

    @Schema(name = "partnerFlag", description ="合伙人标识", type = "Boolean", implementation = Boolean.class)
    private Boolean partnerFlag;

    @Schema(description = "用户会员", type = "IdentityVerificationVo", implementation = UserMembershipInfoVo.class)
    private UserMembershipInfoVo userMembershipInfoVo;

    @Schema(description = "红娘", type = "IdentityVerificationVo", implementation = MatchmakerInfoVo.class)
    private MatchmakerInfoVo matchmakerInfoVo;

    @Schema(description = "合伙人", type = "IdentityVerificationVo", implementation = OfflineServiceProviderVo.class)
    private OfflineServiceProviderVo offlineServiceProviderVo;
    
    @Schema(description = "身份信息", type = "IdentityVerificationVo", implementation = IdentityVerificationVo.class)
    private IdentityVerificationVo identityVerificationVo;

    @Schema(description = "用户资料信息", type = "UserProfileInfoVo", implementation = UserProfileInfoVo.class)
    private UserProfileInfoVo userProfileInfoVo;

    @Schema(description = "红娘地区", type = "String", implementation = String.class)
    private String matchmakerRegion;

    @Schema(description = "合伙人地区", type = "String", implementation = String.class)
    private String partnerRegion;

    @Schema(description = "用户设置信息", type = "UserSettingsInfoVo", implementation = UserSettingsInfoVo.class)
    private UserSettingsInfoVo userSettingsInfoVo;

    @Schema(description = "介绍人电话", type = "String", implementation = String.class)
    private String instroPhone;

    @Schema(description = "介绍人编码", type = "String", implementation = String.class)
    private String instroCode;
}